package com.gitee.netty.socket_demo;

import lombok.extern.slf4j.Slf4j;

import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;

/**
 * 开发人员   YooLin1c
 * 编写日期   2018/7/21
 * 联系邮箱   401664157@qq.com
 * 作用描述
 */
@Slf4j
public class Server {
    private ServerSocket serverSocket;

    public Server(int port) {
        try {
            this.serverSocket = new ServerSocket(port);
            log.info("服务端启动成功，端口：{}", port);
        } catch (IOException e) {
            log.error("服务端启动失败", e);
        }
    }

    public void start() {
        // 新启一个线程，防止服务端的启动会阻塞主线程
        new Thread(this::doStart).start();
    }

    private void doStart() {
        while (true) {
            try {
                // 接收客户端连接（accept是阻塞方法）
                Socket client = serverSocket.accept();
                new ClientHandler(client).start();
            } catch (IOException e) {
                log.error("服务端处理新客户端连接异常", e);
            }
        }
    }
}
